J’ai fait un tout petit programme pour télécharger tous les posts en format Markdown d’un utilisateur, c’est disponible ici si ça t’intéresse.
Pourquoi ?
Quand j’ai découvert ce site, j’ai posté un “hello-word” pour tester, puis j’ai sans faire exprès supprimé le dossier de tous mes posts (j’en avais 2). Je me suis donc demandé si c’était possible de tous les télécharger d’un coup sans passer par l’interface SSH.
J’ai essayé d’abord avec scp
, vu que c’est l’outil qui permet de poster des
nouvelles choses. Malheureusement impossible.
Douteux de savoir si je faisais bien les choses (après tout, ce n’est pas comme si
j’utilise scp
tous les jours),
j’ouvre un ticket dans le
ticket tracker de pico.sh et l’auteur du
projet me propose deux choses :
- soit j’utilise git (probablement la meilleure solution)
- soit je ne veux pas utiliser git et je peux télécharger les fichiers Markdown
avec l’endpoint
/raw
.
Vous vous doutez, j’ai choisi la deuxième proposition, sinon je ne serais pas en train d’écrire ce post.
Comment ?
J’ai décidé de le faire en Rust, parce que pourquoi pas.
J’ai commencé avec l’interface Cli en utilisant
clap
.
Ensuite, j’ai cherché à obtenir la liste de tous les posts à télécharger, pour
ça, je “scanne” la page index d’un compte, là où il y a, justement, la liste de
tous les posts. Cette étape est excessivement simple vu qu’il n’y a pas de
page. Pour le parsing j’utilise
scraper
. Et hop ! En une trentaine
de lignes, j’ai ma liste de posts.
Maintenant pour les télécharger, j’ai plus qu’à faire une requête pour chaque
post et l’enregistrer dans un dossier (tout ça paramétrable grâce à la cli). J’ai
par la suite rajouté une option pour télécharger les fichiers spéciaux comme
_readme.md
et _styles.css
.
Finalement, sortir la 0.0.1
m’a pris tout pile 1 h (sans l’option pour
télécharger les fichiers spéciaux), c’était vraiment sympa (et facile) à faire et
j’espère que ça me sera (rien qu’un peu) utile, parce que finalement faire ça,
même si ça a été rapide, ça a été toujours plus long que télécharger à la main
mes 2 posts, voire juste les réécrire à la main.